package com.hzlj.position.locate.differentiation.sysCheck.traceCheck;

import com.hzlj.common.message.common.dto.message.MessageNoticeResultDTO;
import com.hzlj.position.locate.common.common.PositionSimpleDTO;
import com.hzlj.position.locate.common.dto.position.PositionQueryResultDTO;
import com.hzlj.position.locate.common.model.Position;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;
import java.util.Map;

/**
 * 位置确认接口
 */
public interface TraceSysCheck {

    /**
     * 第一步：通知矫正对象上报
     */
    void noticeJzry(List<Position> positions,
                    Map<String, MessageNoticeResultDTO> notices);

    /**
     * 第二步：矫正人员上报，并更新上报结果
     *
     * @param report         上报位置
     * @param originPosition 原始记录
     */
    void updateReportResult(String jzId,
                            String jgCode,
                            PositionSimpleDTO report,
                            PositionSimpleDTO originPosition);

    /**
     * 第三步：矫正人员未上报，并更新未上报结果
     */
    void updateNoReportResult(PositionQueryResultDTO position,
                              MessageNoticeResultDTO notice);

    /**
     * 有些因为需要做特殊帅选
     */
    default List<Position> filterPosition(List<Position> positions) {
        return positions;
    }

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    class DifferentiationData {
        private PositionSimpleDTO report;
        private PositionSimpleDTO oriPosition;
    }
}
